<?php
class Credentials
{
    protected $profil;
    protected $user;

    public function Credentials()
    {
        $this->user = sfContext::getInstance()->getUser();
        $this->profil = DbFinder::from('Profil')->findPk($this->user->getAttribute('id'));
    }

    public function addCredentials()
    {
        switch ($this->profil->getTip())
        {
            case ProfilPeer::$tip['operater']:
                $this->user->addCredential('operater');
                $this->addOperaterRazredSkolas();
                break;
            case ProfilPeer::$tip['profesor']:
                $this->user->addCredential('profesor');
                $this->addProfesorRazredSkolas();
                break;
            case ProfilPeer::$tip['upravnik']:
                $this->user->addCredential('upravnik');
                $this->addUpravnikSkolas();
                break;
        }

    }

    private function addOperaterRazredSkolas()
    {
        $razreds = array();
        $skolas = array();
        $operater_razreds = DbFinder::from('OperaterRazred')->where('OperaterId', $this->profil->getId())->find();
        foreach($operater_razreds as $operater_razred)
        {
            $razreds[] = $operater_razred->getRazredId();
            if(!in_array($operater_razred->getRazred()->getSkolaId(),$skolas)/* and $operater_razred->getRazred()->getSkola()->getTip()!= SkolaPeer::$tip['područna']*/)
              $skolas[] = $operater_razred->getRazred()->getSkolaId();
        }

        $this->user->setAttribute('razreds', $razreds);
        $this->user->setAttribute('skolas', $skolas);
    }

    private function addProfesorRazredSkolas()
    {
        $razreds = array();
        $skolas = array();
        $predmet_razreds = DbFinder::from('PredmetRazred')->where('ProfesorId', $this->profil->getId())->find();
        $skolas[] = $this->profil->getProfesor()->getSkolaId();
        foreach($predmet_razreds as $predmet_razred)
        {
            if(!in_array($predmet_razred->getRazredId(), $razreds))
              $razreds[$predmet_razred->getRazredId()][] = $predmet_razred->getPredmetId();
        }
        $jezik_razreds = DbFinder::from('Razred')->join('Skola')->withColumn('Skola.Tip', 'TipSkola')->where('JezikProfesor', $this->profil->getId())->find();
        foreach($jezik_razreds as $jezik_razred)
        {
          $razreds[$jezik_razred->getId()][] = $jezik_razred->getJezik();
        }

        $razrednis = DbFinder::from('Razred')->select(array('Id', 'Razred', 'Slovo', 'SkolaId'))->join('Smer')->join('Skola')->withColumn('Skola.Tip', 'TipSkola')->withColumn('Smer.Naziv', 'Smer')->withColumn('Smer.Tip', 'Tip')->orderBy('Smer.Tip')->orderBy('Razred.Razred')->orderBy('Razred.Slovo')->findBy('ProfesorId', $this->user->getAttribute('id'));
        foreach($razrednis as $razredni)
        {
          $razredni_arr[$razredni['Id']] = array('Razred' => $razredni['Razred'], 'Slovo' => $razredni['Slovo'], 'Smer' => $razredni['Smer'], 'Tip' => $razredni['Tip']);
        }

        $this->user->setAttribute('razreds', $razreds);
        $this->user->setAttribute('skolas', $skolas);
        $this->user->setAttribute('razrednis', $razredni_arr);
    }

    private function addUpravnikSkolas()
    {
        $skolas = array();
        $upravnik_skolas = DbFinder::from('UpravnikSkola')->join('Skola')->withColumn('Skola.Ime', 'ImeSkole')->where('UpravnikSkola.UpravnikId', $this->profil->getId())->find();
        foreach($upravnik_skolas as $upravnik_skola)
          $skolas[$upravnik_skola->getSkolaId()] = $upravnik_skola->getColumn('ImeSkole');

        $this->user->setAttribute('skolas', $skolas);
    }

    public function getSkolaNazivs()
    {
        $skolas_arr = array();
        $skolas = DbFinder::from('Skola')->findPk($this->user->getAttribute('skolas'));
        foreach($skolas as $skola)
          $skolas_arr[$skola->getId()] = $skola->getIme();

        return $skolas_arr;
    }

    public function getRazredNazivs()
    {
        $razreds_arr = array();
        $razreds = DbFinder::from('Razred')->findPk($this->user->getAttribute('razreds'));
        foreach($razreds as $razred)
          $razreds_arr[$razred->getId()] = (string) $razred;

        return $razreds_arr;
    }

    public function getRazredSkolaNazivs($skola_id)
    {
        $razreds_arr = array();
        $razreds = DbFinder::from('Razred')->where('SkolaId', $skola_id)->where('Id', 'in', $this->user->getAttribute('razreds'))->find();
        foreach($razreds as $razred)
          $razreds_arr[$razred->getId()] = (string) $razred;

        return $razreds_arr;
    }

    public function getRazredSkolaNazivsList($skola_id)
    {
        $razreds_arr = array();
        $razreds = DbFinder::from('Razred')->join('Smer')->where('Razred.SkolaId', $skola_id)->where('Razred.Id', 'in', $this->user->getAttribute('razreds'))->where('Smer.Tip', 1)->orderBy('Razred')->orderBy('Slovo')->find();
        foreach($razreds as $razred)
          $razreds_arr[$razred->getId()] = (string) $razred;

        return $razreds_arr;
    }

    public function getRazrednis()
    {
        $razredi = array();
        $razredni_arr = $this->user->getAttribute('razrednis');
        if($razredni_arr)
        foreach($razredni_arr as $razred_id => $razredi_sess)
          $razredi[] = $razred_id;

        return $razredi;
    }

    public function getPredajes()
    {
        $predajes = array_keys($this->user->getAttribute('razreds'));

        return $predajes;
    }

    public function getError()
    {
        return 'Stop hacking!';
    }
}